package cn.net.wanji.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;

/**
 * @author guodejun
 * @createTime 2022/10/28 10:26
 * @description
 */
public class StringUtils {


    /**
     * 空字符串
     */
    private static final String NULLSTR = "";

    private static Random mRandom = new Random();

    /**
     * * 判断一个对象是否非空
     *
     * @param object Object
     * @return true：非空 false：空
     */
    public static boolean isNotNull(Object object) {
        return !isNull(object);
    }

    /**
     * * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空 false：非空
     */
    public static boolean isNull(Object object) {
        return object == null;
    }


    /**
     * 格式化文本, {} 表示占位符<br>
     * 此方法只是简单将占位符 {} 按照顺序替换为参数<br>
     * 如果想输出 {} 使用 \\转义 { 即可，如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>
     * 例：<br>
     * 通常使用：format("this is {} for {}", "a", "b") -> this is a for b<br>
     * 转义{}： format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
     * 转义\： format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
     *
     * @param template 文本模板，被替换的部分用 {} 表示
     * @param params   参数值
     * @return 格式化后的文本
     */
    public static String format(String template, Object... params) {
        if (isEmpty(params) || isEmpty(template)) {
            return template;
        }
        return StrFormatter.format(template, params);
    }

    /**
     * * 判断一个对象数组是否为空
     *
     * @param objects 要判断的对象数组
     *                * @return true：为空 false：非空
     */
    public static boolean isEmpty(Object[] objects) {
        return isNull(objects) || (objects.length == 0);
    }

    /**
     * * 判断一个字符串是否为空串
     *
     * @param str String
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(String str) {
        return isNull(str) || NULLSTR.equals(str.trim());
    }

    /**
     * YYYY-MM-DDTHH:mm:ss 转换为 YYYY-MM-DD HH:mm:ss
     *
     * @param headPicTime
     * @return
     */
    public static String timeRevise(String headPicTime) {
        if (isEmpty(headPicTime)) {
            return null;
        }
        String[] parts = headPicTime.split("\\.");
        String result = parts[0];

        return result.replace("T", " ");
    }

    /**
     * String (2021-12-21) 转为 java.util.Date(2021-12-21 23:59:59)
     */
    public static Date stringToDate(String str) {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = format.parse(str);
        } catch (ParseException e) {

        }
        return date;
    }

    public static String getRandomPercentage() {
        int i = mRandom.nextInt(50) + 50;
        return i + "%";
    }

    public static String arraysToString(Object[] arr) {
        String s = Arrays.toString(arr).replace("[", "");
        s = s.replace("]", "");
        return s;
    }

}
